package week3.blog_code.exer1002;

import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int k = sc.nextInt();
        int n = (int) Math.pow(2, k); // 比赛人数
        // 日程表
        int[][] matrix = new int[n][n];
        // rowSet，保存任意一行的已存放元素
        List<Set<Integer>> rowSet = new ArrayList<>();
        // colSet，保存任意一列的已存放元素
        List<Set<Integer>> colSet = new ArrayList<>();
        for (int i = 0; i < n; i++) {
            rowSet.add(new HashSet<>());
            colSet.add(new HashSet<>());
        }
        // 暴力求解
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < n; j++) {
                // 枚举1-n
                for (int target = 1; target <= n; target++) {
                    if (!rowSet.get(i).contains(target) && !colSet.get(j).contains(target)) {
                        // 当前行、列都没有出现过
                        matrix[i][j] = target;
                        rowSet.get(i).add(target);
                        colSet.get(j).add(target);
                        break;
                    }
                }
            }
        }
        // 打印结果
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < n - 1; j++) {
                System.out.print(matrix[i][j] + " ");
            }
            System.out.println(matrix[i][n - 1]);
        }
    }
}
